#include #include void perm( int n ), print( int s[], int n ), swap( int *i, int *j ); main() { int resp; for ( ; ; ) { printf( "Do another (1 = yes, 0 = no)? " ); scanf( "%d", &resp ); if ( resp != 1 ) return EXIT_SUCCESS; do { printf( "Permute how many (1 to 6)? " ); scanf( "%d", &resp ); } while ( resp < 1 || resp > 6 ); perm( resp ); } } void perm( int n ) { int s[ 7 ], i, nfact, m, k, p, q; for ( i = 1, nfact = 1; i <= n; i++ ) { s[ i ] = i; nfact *= i; } print( s, n ); for ( i = 2; i <= nfact; i++ ) { m = n - 1; while ( s[ m ] > s[ m + 1 ] ) m--; k = n; while ( s[ m ] > s[ k ] ) k--; swap( &s[ m ], &s[ k ] ); p = m + 1; q = n; while ( p < q ) { swap( &s[ p ], &s[ q ] ); p++; q--; } print( s, n ); } } void print( int s[], int n ) { int i; for ( i = 1; i <= n; i++ ) printf( "%d ", s[ i ] ); putchar( '\n' ); } void swap( int *i, int *j ) { int temp = *i; *i = *j; *j = temp; }